A peer-to-peer system is a distributed service architecture in which resources such as processing power, memory, disk storage, network bandwidth, etc. are partitioned and divided among peers. Each peer in a peer-to-peer system may be both a consumer and supplier of resources.
Peer-to-peer systems provide mechanisms for peer discovery to enable nodes to join the peer-to-peer system. One conventional mechanism for peer discovery is the use of a static list. The static list is a list of nodes in the peer-to-peer system. A new node uses the network addresses of nodes in the static list to determine system membership. Static lists provide a very fast discovery. However, static lists do not work well when membership in the peer-to-peer system is dynamic. Additionally, static lists are cumbersome for large numbers of nodes.
Due to the limitations of static lists, most peer-to-peer systems use user datagram protocol (UDP) multicast to perform peer discovery. Multicast is the delivery of a message or data to multiple destination computing devices simultaneously in a single transmission. With multicast, as a node joins a peer-to-peer system, the node announces its address to existing nodes in the peer-to-peer system. The nodes (each of which is a peer in the peer-to-peer system) then respond by sending their addresses to the new node. Multicast enables peer discovery in a peer-to-peer system that has a dynamic membership. However, multicast can require multiple round trip messages to perform discovery. Additionally, many cloud computing platforms (e.g., Amazon® Elastic Compute Cloud (EC2), Rackspace® Cloud, etc.) do not permit multicasts. Therefore, peer-to-peer systems running on cloud computing platforms often cannot use multicast for peer discovery.